import request from "@/utils/request"
// 轮播图
/*
* type:资源类型,对应以下类型,默认为 0 即 PC
0: pc

1: android

2: iphone

3: ipad
* */

export const getPcBanner = () => {
  return request({
    method: 'get',
    url: '/banner',
    params:{
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
/**
 *@params：
 *@desc：个性化推荐，列表第一个和其他三个
 *@author：羽
 *@date 2022/08/04 11:11:30
 */
// 每日推荐歌单
export const getRecommendResource = () => {
  return request({
    method: 'get',
    url: '/recommend/resource',
    params: {
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
// 每日推荐歌曲
export const getRecommendSongs = () => {
  return request({
    method: 'get',
    url: '/recommend/songs',
    params: {
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

// 首页Pc个性化推荐私人雷达
export const getPersonalizedMusic = () => {
  return request({
    method: 'get',
    url: '/recommend/resource',
    params: {
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}


/**
 * @author: 羽
 * @params:
 * @desc: 首页热门推荐标题和数据
 * @date: 2022/7/29
 */
// /playlist/hot 热门歌单分类 ，这边返回的数据点击标题跳转到歌单列表携带cat也就是华语流行
// 调用这个接口 getTopPlaylistHighquality传递cat参数
export const getPlaylistHot = () => {
  return request({
    method: 'get',
    url: '/playlist/hot',
    params: {
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

// /personalized 热门推荐歌单 默认30条limit
export const getSongList = (num = 8) => {
  return request({
    method: 'get',
    url: '/personalized',
    params: {
      limit: num,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

// end

/**
 * @author: 羽
 * @params:
 * @desc: start 二级菜单歌单的标题全部分类和数据
 * @date: 2022/7/29
 */
//  歌单分类
export const getPlaylistCatlist = () => {
  return request({
    method: 'get',
    url: '/playlist/catlist',
    params: {
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

// 歌单 ( 网友精选碟 )
/*
* 可选参数 : order: 可选值为 'new' 和 'hot', 分别对应最新和最热 , 默认为 'hot'

cat: tag, 比如 " 华语 "、" 古风 " 、" 欧美 "、" 流行 ", 默认为 "全部",可从歌单分类接口获取(/playlist/catlist)

limit: 取出歌单数量 , 默认为 50

offset: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)*50, 其中 50 为 limit 的值*/
// {cat = '', limit = 50, offset = 0, order = 'hot'}
export const getTopPlaylist = (params) => {
  return request({
    method: 'get',
    url: '/top/playlist',
    params: {
      ...params,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
// end
// ---------------------------------
/**
 * @author: 羽
 * @params:
 * @desc: 精品歌单标签列表 (暂时不知道是哪里标签)和下面数据是配套的
 * @date: 2022/7/29
 */
//
export const getPlaylistHighqualityTags = () => {
  return request({
    method: 'get',
    url: '/playlist/highquality/tags',
    params:{
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

// 获取精品歌单 首页热门推荐
/*
* cat: tag, 比如 " 华语 "、" 古风 " 、" 欧美 "、" 流行 ", 默认为 "全部",可从精品歌单标签列表接口获取(/playlist/highquality/tags)
limit: 取出歌单数量 , 默认为 50
before: 分页参数,取上一页最后一个歌单的 updateTime 获取下一页数据
* */
export const getTopPlaylistHighquality = ({cat = '', limit = 50, before = ''}) => {
  return request({
    method: 'get',
    url: '/top/playlist/highquality',
    params: {
      cat,
      limit,
      before,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
// end
/**
 *@params：
 *@desc：
 * 获取歌单详情
 * 说明 : 歌单能看到歌单名字, 但看不到具体歌单内容 , 调用此接口 , 传入歌单 id,
 * 可 以获取对应歌单内的所有的音乐(未登录状态只能获取不完整的歌单,登录后是完整的)，但是返回的 trackIds 是完整的，
 * tracks 则是不完整的，可拿全部 trackIds 请求一次 song/detail 接口获取所有歌曲的详情 (https://github.com/Binaryify/NeteaseCloudMusicApi/issues/452)
 *
 * 必选参数 : id : 歌单 id
 *
 * 可选参数 : s : 歌单最近的 s 个收藏者,默认为 8
 *
 * 接口地址 : /playlist/detail
 *
 * 调用例子 : /playlist/detail?id=24381616
 *@author：羽
 *@date 2022/08/12 08:09:42
 */
export const getPlaylistDetail = (id) => {
  return request({
    method: 'get',
    url: '/playlist/detail',
    params: {
      id,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
/**
 *@params：
 *@desc：
 * 获取歌单所有歌曲
 * 说明 : 由于网易云接口限制，歌单详情只会提供 10 首歌，通过调用此接口，传入对应的歌单id，即可获得对应的所有歌曲
 *
 * 必选参数 : id : 歌单 id
 *
 * 可选参数 : limit : 限制获取歌曲的数量，默认值为当前歌单的歌曲数量
 *
 * 可选参数 : offset : 默认值为0
 *
 * 接口地址 : /playlist/track/all
 *
 * 调用例子 : /playlist/track/all?id=24381616&limit=10&offset=1
 *
 * 注：关于offset，你可以这样理解，假设你当前的歌单有100首歌
 *
 * 你传入limit=10&offset=0等价于limit=10，你会得到第1-10首歌曲
 *
 * 你传入limit=10&offset=1，你会得到第2-11首歌曲
 *
 * 如果你设置limit=10&offset=2，你就会得到第3-12首歌曲
 *@author：羽
 *@date 2022/08/12 08:31:24
 */

export const getPlaylistTrackAll = (params = {id: '', limit: 10, offset: 0}) => {
  return request({
    method: 'get',
    url: '/playlist/track/all',
    params: {
      ...params,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}


// 获取音乐url,可以传递多个id，id: '111111,2222,44444'这种格式
export const getSongUrl = (id) => {
  return request({
    method: 'get',
    url: `/song/url`,
    params: {
      id,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
// 签到 参数type: 签到类型 , 默认 0, 其中 0 为安卓端签到 ,1 为 web/PC 签到
export const getDailySignin = (type = 1) => {
  return request({
    method: 'get',
    url: '/daily_signin',
    params: {
      type,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc： 首页新碟上架 和 二级路由新碟上架
 *@author：羽
 *@date 2022/08/04 08:58:03
 */
/*
无法选择返回多少数据将下放的作为新碟上架
* 可选参数 :

area: ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本

type : new:全部 hot:热门,默认为 new

year : 年,默认本年

month : 月,默认本月
* */
export const getTopAlbum = () => {
  return request({
    method: 'get',
    url: '/top/album',
    params: {
      type: 'hot',
      area: 'ZH',
      limit: 8,
      offset: 0 ,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
// 二级路由新碟上架
/*
* 说明 : 登录后调用此接口 ,可获取全部新碟
* limit : 返回数量 , 默认为 30

offset : 偏移数量，用于分页 , 如 :( 页数 -1)*30, 其中 30 为 limit 的值 , 默认为 0

area : ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本
* */
export const getAlbumNew = (limit = 8, offset = 0, area = 'KR') => {
  return request({
    method: 'get',
    url: '/album/new',
    params: {
      timerstamp: new Date().getTime(),//传入参数时间戳
      limit,
      offset,
      area
    }
  })
}
/**
 *@params：
 *@desc：最新专辑
 * 说明 : 调用此接口 ，获取云音乐首页新碟上架数据
 *
 * 接口地址 : /album/newest
 *
 * 调用例子 : /album/newest
 *@author：羽
 *@date 2022/08/18 08:08:07
 */

export const getAlbumNewest = () => {
  return request({
    method: 'get',
    url: '/album/newest',
    params:{
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：首页榜单, 榜单数据
 *@author：羽
 *@date 2022/08/04 14:18:57
 */

export const getTopList = () => {
  return request({
    method: 'get',
    url: '/toplist',
    params:{
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

// 榜单详情可以使用159行的接口
// 所有榜单内容摘要

export const getToplistDetail = () => {
  return request({
    method: 'get',
    url: '/toplist/detail',
    params:{
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：获取歌曲详情
 *@author：羽
 * 说明 : 调用此接口 , 传入音乐 id(支持多个 id, 用 , 隔开), 可获得歌曲详情(dt为歌曲时长)
 *
 * 必选参数 : ids: 音乐 id, 如 ids=347230
 *@date 2022/08/05 10:21:53
 */
export const getSongDetail = (ids) => {
  return request({
    method: 'get',
    url: '/song/detail',
    params: {
      ids,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}


// 歌曲详情字段
/*
* name: String, 歌曲标题
id: u64, 歌曲ID
pst: 0，功能未知
t: enum,
  0: 一般类型
  1: 通过云盘上传的音乐，网易云不存在公开对应
    如果没有权限将不可用，除了歌曲长度以外大部分信息都为null。
    可以通过 `/api/v1/playlist/manipulate/tracks` 接口添加到播放列表。
    如果添加到“我喜欢的音乐”，则仅自己可见，除了长度以外各种信息均为未知，且无法播放。
    如果添加到一般播放列表，虽然返回code 200，但是并没有效果。
    网页端打开会看到404画面。
    属于这种歌曲的例子: https://music.163.com/song/1345937107
  2: 通过云盘上传的音乐，网易云存在公开对应
    如果没有权限则只能看到信息，但无法直接获取到文件。
    可以通过 `/api/v1/playlist/manipulate/tracks` 接口添加到播放列表。
    如果添加到“我喜欢的音乐”，则仅自己可见，且无法播放。
    如果添加到一般播放列表，则自己会看到显示“云盘文件”，且云盘会多出其对应的网易云公开歌曲。其他人看到的是其对应的网易云公开歌曲。
    网页端打开会看到404画面。
    属于这种歌曲的例子: https://music.163.com/song/435005015
ar: Vec<Artist>, 歌手列表
alia: Vec<String>,
  别名列表，第一个别名会被显示作副标题
  例子: https://music.163.com/song/536623501
pop: 小数，常取[0.0, 100.0]中离散的几个数值, 表示歌曲热度
st: 0: 功能未知
rt: Option<String>, None、空白字串、或者类似`600902000007902089`的字符串，功能未知
fee: enum,
  0: 免费或无版权
  1: VIP 歌曲
  4: 购买专辑
  8: 非会员可免费播放低音质，会员可播放高音质及下载
  fee 为 1 或 8 的歌曲均可单独购买 2 元单曲
v: u64, 常为[1, ?]任意数字, 功能未知
crbt: Option<String>, None或字符串表示的十六进制，功能未知
cf: Option<String>, 空白字串或者None，功能未知
al: Album, 专辑，如果是DJ节目(dj_type != 0)或者无专辑信息(single == 1)，则专辑id为0
dt: u64, 歌曲时长
h: Option<Quality>, 高质量文件信息
m: Option<Quality>, 中质量文件信息
l: Option<Quality>, 低质量文件信息
a: Option<?>, 常为None, 功能未知
cd: Option<String>, None或如"04", "1/2", "3", "null"的字符串，表示歌曲属于专辑中第几张CD，对应音频文件的Tag
no: u32, 表示歌曲属于CD中第几曲，0表示没有这个字段，对应音频文件的Tag
rtUrl: Option<String(?)>, 常为None, 功能未知
rtUrls: Vec<String(?)>, 常为空列表, 功能未知
dj_id: u64,
  0: 不是DJ节目
  其他：是DJ节目，表示DJ ID
copyright: u32, 0, 1, 2: 功能未知
s_id: u64, 对于t == 2的歌曲，表示匹配到的公开版本歌曲ID
mark: u64, 功能未知
originCoverType: enum
  0: 未知
  1: 原曲
  2: 翻唱
originSongSimpleData: Option<SongSimpleData>, 对于翻唱曲，可选提供原曲简单格式的信息
single: enum,
  0: 有专辑信息或者是DJ节目
  1: 未知专辑
noCopyrightRcmd: Option<NoCopyrightRcmd>, None表示可以播，非空表示无版权
mv: u64, 非零表示有MV ID
rtype: 常为0，功能未知
rurl: Option<String(?)>, 常为None，功能未知
mst: u32, 偶尔为0, 常为9，功能未知
cp: u64, 功能未知
publish_time: i64, 毫秒为单位的Unix时间戳
pc: 云盘歌曲信息，如果不存在该字段，则为非云盘歌曲
*
* */
/**
 *@params：
 *@desc：
 * 说明 : 调用此接口 , 传入类型和歌单 id 可收藏歌单或者取消收藏歌单
 *
 * 必选参数 :
 *
 * t : 类型,1:收藏,2:取消收藏 id : 歌单 id
 *
 * 接口地址 : /playlist/subscribe
 *
 * 调用例子 : /playlist/subscribe?t=1&id=106697785 /playlist/subscribe?t=2&id=106697785
 *@author：羽
 *@date 2022/08/05 13:59:37
 */
export const getPlaylistSubscribe = (params) => {
  return request({
    method: 'get',
    url: '/playlist/subscribe',
    params:{
      ...params,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
/**
 *@params：
 *@desc：获取歌词
 * 说明 : 调用此接口 , 传入音乐 id 可获得对应音乐的歌词 ( 不需要登录 )
 *
 * 必选参数 : id: 音乐 id
 *
 * 接口地址 : /lyric
 *
 * 调用例子 : /lyric?id=33894312
 *@author：羽
 *@date 2022/08/08 09:55:09
 */
export const getLyric = (id) => {
  return request({
    method: 'get',
    url: '/lyric',
    params: {
      id,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}

/**
 *@params：
 *@desc：获取相似音乐
 * 说明 : 调用此接口 , 传入歌曲 id, 可获得相似歌曲
 *
 * 必选参数 : id: 歌曲 id
 *
 * 接口地址 : /simi/song
 *
 * 调用例子 : /simi/song?id=347230 ( 对应 ' 光辉岁月 ' 相似歌曲 )
 *@author：羽
 *@date 2022/08/17 14:28:59
 */

export const getSimiSong = (id) => {
  return request({
    method: 'get',
    url: '/simi/song',
    params: {
      id,
      timerstamp: new Date().getTime(),//传入参数时间戳
    }
  })
}
